#pragma once
#include"RBtree.h"
using namespace std;

namespace tmt
{
	template<class K>
	class set
	{
	public:
		class KeyOfSet
		{
		public:
			const K& operator()(const K& k)
			{
				return k;
			}
		};
		typedef typename RBtree<K, K, KeyOfSet>::iterator iterator;

		iterator begin()
		{
			return _RBt.begin();
		}
		iterator end()
		{
			return _RBt.end();
		}
		pair<iterator, bool> insert(const K& k)
		{
			return _RBt.insert(k);
		}
	private:
		RBtree<K, K, KeyOfSet> _RBt;
	};


	void test_set()
	{
		set<int> s;

		set<int>::iterator it = s.begin();
		while (it != s.end())
		{
			cout << *it << " ";
			++it;
		}
		cout << endl;

		s.insert(3);
		s.insert(2);
		s.insert(1);
		s.insert(5);
		s.insert(3);
		s.insert(6);
		s.insert(4);
		s.insert(9);
		s.insert(7);


		it = s.begin();
		while (it != s.end())
		{
			cout << *it << " ";
			++it;
		}
		cout << endl;
	}
}